﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WTwitter.Model.Framework {
	/// <summary>
	/// １種類のフィルタを表すクラス
	/// </summary>
	public abstract class Filter {
		public Filter() {
			FilterAdded += (sender, e) => { };
			FilterRemoved += (sender, e) => { };
		}

		/// <summary>
		/// フィルタ処理をする
		/// </summary>
		/// <param name="target">判定するアイテム</param>
		/// <returns>OKならtrue,NGならfalse</returns>
		abstract public bool Judge(ITimelineItem target);

		/// <summary>
		/// フィルタにNGワードなどが追加がされたことを知らせるイベント
		/// ※実際に何が追加されたかは通知しないが、このイベント後はフィルタされるべきアイテムが増えることを意味する。
		/// ※各タイムラインでフィルタをやり直すなど
		/// </summary>
		public event EventHandler FilterAdded;

		/// <summary>
		/// フィルタからNGワードなど削除がされたことを知らせるイベント
		/// ※実際に何が追加されたかは通知しないが、このイベント後はフィルタされるべきアイテムが減ったことを意味する。
		/// </summary>
		public event EventHandler FilterRemoved;

		protected void OnFilterAdded() {
			FilterAdded(this, EventArgs.Empty);
		}

		protected void OnFilterRemoved() {
			FilterRemoved(this, EventArgs.Empty);
		}
	}
}
